iT邦幫忙

0

woring directory.工作目錄 vs working tree.工作樹

git
  • 分享至 

  • xImage
  •  

在搜了一堆解釋, 還是非常混淆!
在測試、體會之後, 覺得應該這樣說會比較好!
野人獻曝, 希望幫助到您!

首先, 應該先了解:

  1. working directory就是檔案系統下的資料夾, 不管是否接受 git 管理, 它就已經存在。
  2. git 所管理的內容, 都是working directory在某個時點的副本
  3. 檔案系統下, 你看到的是資料夾路徑與檔案; 在git管理的倉庫中, 檔案會另外複製、處理成snapshot.快照副本
    其中除了檔案原有的內容、路徑、修改時間等檔案資訊外, 還多了提交到git的時點、提交者等訊息(包裝成提交點)。
  4. 所以, working directory 的內容, 與 git 的內容, 並不是同一個物件!
    提交時內容雖相同, 但本體在 working directory 內, 副本則在git內, 是不同的個體!
  5. 在working directory 的檔案, 通常會繼續修改; 但在 git 內的時間副本, 原則上是不能再改變的 (所以才稱為 snapshot.快照副本)!
  6. 然後, git 的內容, 就是 working directory 在不同時間點, 不斷提交、累積的副本所形成;
    關鍵在於多了提交(時)點, 便可以構成其管理的儲存結構提交樹;
    提交樹的樹狀結構下, 從某個提交點開始回溯, 就可衍生出分支的概念!
  7. 反過來說, 在 git 內, working directory 內的同一個檔案, 可存在不同時點提交、不同內容的副本。
  8. 而 working tree 就是某提交點(通常也都是分支)回溯後、還原產生的整個專案內容!
  9. working tree 與 working directory 的專案內容會有差異? 可能! working tree 的內容可以不提交; 或提交後, 會繼續修改!
  10. 記得! workng tree 是從git管理的副本資料推演、還原出來的內容, 是該專案在某時間點(提交)的內容, 是鎖死不變的!
    (但可以換不同的 workng tree!)
  11. 那麼, 是的! 原則上, working tree 可以有很多個! 但既然叫 working, 特別就是指 working directory 內正在使用的這一個 tree!
  12. 那, 又是哪一個? 在該 working directory 中, HEAD 指的那一個提交點(分支) 還原出來的專案內容就是了!
  13. 有人說 working tree 的位置, 就是 working directory! 簡單說, 是對的! 嚴格說, working directory 並不是 working tree!
  14. working tree 是 git 用來與 working directory 比對、比較專案內容的, 是 git 管理的基礎!
  15. working tree 的實際內容, 是需要時, 從倉庫的提交樹中動態讀取出來, 不像 working directory 就放在資料夾內!
要點 working directory working tree
定義 指當前的專案內容 git目前使用的專案副本內容
用途 實際儲存的區域 內容展開、編修等操作的區域
位置 實體上, 一般指專案資料夾 邏輯上, 位置與 working diretory 相同
內容(時點) 當前、最新的專案內容 是某時點的專案內容(比對的基礎)
實虛 是實體、真正存在 也是實體、真正存在, 但在Git管理下的副本

所以,

  • working directory 與 working tree 是同一資料夾?
  • 以資料夾位置來說, 並不算錯, 但位置不是關鍵
  • 不同時點的專案內容, 才是重點, 也更容易分出差異
  • 1 個 repository, 擁有多個 working tree?
  • 是的, 大部分只用1個, 稱為 main working tree; 但可以有多個!
  • 其實, 每個 working tree 一定會有 working directory, 因為是同一個資料夾內, 不同時點專案內容
  • working tree 簡單來說, 就是由 HEAD 所展開的專案副本
  • 若 working tree 的內容, 與 working directory 的內容相同, 就是 clean

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言